]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
keyboard: Unset current page when it gets destroyed
authorMarco Trevisan (Treviño) <mail@3v1n0.net>
Thu, 9 May 2019 19:30:21 +0000 (14:30 -0500)
committerMarco Trevisan (Treviño) <mail@3v1n0.net>
Thu, 9 May 2019 20:07:54 +0000 (15:07 -0500)
The current page is going to be destroyed as part of _onKeyboardGroupsChanged
cleanup, however we don't unset its pointer, and thus we'd might try to call a
function using an invalidated pointer.

So, unset the this._current_page reference when its get destroyed, connecting
to destroy signal when setting it and disconnecting when changing page.

Fixes https://gitlab.gnome.org/GNOME/gnome-shell/issues/1281

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/540

js/ui/keyboard.js

index fbba2840e5890f7e48a48cd29501650a012a8cd1..a67d08f1e98f53c368108ae71a49d084047246be 100644 (file)
@@ -1522,10 +1522,15 @@ var Keyboard = class Keyboard {
 
         if (this._current_page != null) {
             this._setCurrentLevelLatched(this._current_page, false);
+            this._current_page.disconnect(this._current_page._destroyID);
             this._current_page.hide();
+            delete this._current_page._destroyID;
         }
 
         this._current_page = layers[activeLevel];
+        this._current_page._destroyID = this._current_page.connect('destroy', () => {
+            this._current_page = null;
+        });
         this._updateCurrentPageVisible();
     }